package com.bit.demo2;
//***************多态*******************
//class Shape {
//    public void draw() {
//        // 啥都不用干
//    }
//}
//
//class Cycle extends Shape {
//    @Override
//    public void draw() {
//        System.out.println("○");
//    }
//}
//
//class Rect extends Shape {
//    @Override
//    public void draw() {
//        System.out.println("□");
//    }
//}
//
//class Flower extends Shape {
//    @Override
//    public void draw() {
//        System.out.println("♣");
//    }
//}
//
//class Triangle extends Shape{
//    @Override
//    public void draw() {
//        System.out.println("三角形");
//    }
//}
//
///////////////////////////////我是分割线//////////////////////
//
//public class TestDemo {
//    public static void main(String[] args) {
//        Rect rect = new Rect();
//        Flower flower = new Flower();
//        Cycle cycle = new Cycle();
//        Triangle triangle = new Triangle();
//
//        Shape[] shapes = {new Cycle(), new Rect(), new Cycle(),//创建一个数组，需要打印其他图形，只需要重新创建一个实例放入即可
//                new Rect(), new Flower(),new Triangle()};
//        for (Shape shape : shapes) {
//            shape.draw();
//        }
//    }
//}

//==========================================================================================
//**************抽象类:一个没有具体实现的方法*****************
//抽象类不能被实例化，，，，其实只能被继承
//抽象类中可以包含其他的非抽象方法, 也可以包含字段. 这个非抽象方法和普通方法的规则都是一样的, 可以被重写,
//也可以被子类直接调用
//一个普通类继承了一个抽象类，需要重写抽象类的所有抽象方法
//抽象类的最大作用就是为了被继承
//抽象类不能被final修饰

abstract class Shape {
    public int a;
//  abstract private void draw; 抽象方法不能是private的
    public void func(){
        System.out.println("测试普通方法");
    }

    public abstract void draw();//抽象方法
}

//一个抽象类A继承了一个抽象类，那么这个抽象类A可以不实现抽象父类的抽象方法
abstract class A extends Shape{
    public abstract void funcA();
}
//当A再次被一个普通类继承后，那么A和B当中的抽象方法必须被重写
class B extends A{
    @Override
    public void funcA() {

    }
    @Override
    public void draw() {

    }
}

//一个普通类继承了一个抽象类，需要重写抽象类的所有抽象方法
class Cycle extends Shape {
    @Override
    public void draw() {
        System.out.println("○");
    }
}

class Rect extends Shape {
    @Override
    public void draw() {
        System.out.println("□");
    }
}

class Flower extends Shape {
    @Override
    public void draw() {
        System.out.println("♣");
    }
}

class Triangle extends Shape{
    @Override
    public void draw() {
        System.out.println("三角形");
    }
}

/////////////////////////////我是分割线//////////////////////


public class TestDemo {
    public static void drawMap(Shape shape){
        shape.draw();
    }
    public static void main(String[] args) {
       Shape shape = new Rect();
       drawMap(shape);
       Cycle cycle = new Cycle();
       drawMap(cycle);
    }
}